//
//  zhongshu.cpp
//  suanfa
//
//  Created by 刘锦程 on 2023/7/6.
//

#include "zhongshu.hpp"
using namespace std;
/*
 【问题描述】
 一条街道的一边有几座房子。因为环保原因居民想要在路边种些树，路边的地区 被分割成口块，并被编号为 1…n,每块大小为一个单位尺寸并最多可种一棵树。每个居民想在门前种些树并指定了三个数 b,e,t这三个数分别表示该居民想在b和e之间最少种士棵树，当然,b<e,t≤e-b十1,允许居民想种树的子区域可以交叉。出于资金紧缺的原因，环保部门请你求出能够满足所有居民的种树要求时所需要种的树的最少数量。
 【输入格式】
 第一行为 n,表示区域的个数。
 第二行为h,表示房子的数目。
 下面上行描述居民的需要：b.et(0<b<¢≤30 000,t≤e—b十1)分别用一个空格分开。
 【输出格式】
 输出一个数,为满足所有居民的要求，所需要种树的最少数量。*/
struct node{
    int b;
    int e;
    int h;
}a[30001];
bool cmp(node x,node y){
    return x.e<y.e;
}
int tr[30001]={};
int zhongshu(){
    int n;
    int t=0;//区域长度
    cin>>t;
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i].b);
        scanf("%d",&a[i].e);
        scanf("%d",&a[i].h);
    }
    sort(a+1,a+n,cmp);
    node p=a[1];
    int ans=0;
    for(int i=1;i<=n;i++){
        for(int j=a[i].b;j<=a[i].e;j++){
            if(tr[j]) a[i].h--;
        }
        while(a[i].h>0){
            ans++;
            tr[a[i].e--]=1;
            a[i].h--;
        }
    }
    return ans;
}
//1 2 3 4 5 6 7
